<?php

namespace frontend\controllers;

use Yii;
use yii\base\InvalidParamException;
use yii\web\BadRequestHttpException;
use yii\web\Controller;
use yii\filters\VerbFilter;
use yii\filters\AccessControl;
use common\models\LoginForm;
use frontend\models\PasswordResetRequestForm;
use frontend\models\ResetPasswordForm;
use frontend\models\SignupForm;
use frontend\models\ContactForm;
use backend\models\Category;
use backend\models\Product;
use frontend\models\RecentView;
use frontend\models\User;

/**
 * Site controller
 */
class SiteController extends SuperController {

	/**
	 * @inheritdoc
	 */
	public function behaviors() {
		return [
			'access' => [
				'class' => AccessControl::className(),
				'only' => ['logout', 'signup'],
				'rules' => [
						[
						'actions' => ['login', 'error', 'captcha'],
						'allow' => true,
					],
						[
						'actions' => ['signup'],
						'allow' => true,
						'roles' => ['?'],
					],
						[
						'actions' => ['logout'],
						'allow' => true,
						'roles' => ['@'],
					],
				],
			],
			'verbs' => [
				'class' => VerbFilter::className(),
				'actions' => [
					'logout' => ['post'],
				],
			],
		];
	}

	/**
	 * @inheritdoc
	 */
	public function actions() {

		return [
			'error' => [
				'class' => 'yii\web\ErrorAction',
			],
			'captcha' => [
				'class' => 'yii\captcha\CaptchaAction',
				'maxLength' => 4,
				'minLength' => 4
			],
		];
	}


	/**
	 * Displays homepage.
	 *
	 * @return mixed
	 */
	public function actionIndex() {
		$this->layout = 'layout2';
		$productModel = Product::find()->where('ison = "0" ')->orderBy('saleprice desc')->one();
		if (\Yii::$app->user->isGuest) {
			
		} else {
			$recentViewModel = new RecentView();
			$recentViewProductList = $recentViewModel->getRecentViewProductList();
			return $this->render('index', [
						'recentViewProductList' => $recentViewProductList,
						'productModel' => $productModel
			]);
		}
		return $this->render('index', ['productModel' => $productModel]);
	}

	/**
	 * Logs in a user.
	 *
	 * @return mixed
	 */
	public function actionLogin() {
		if (!Yii::$app->user->isGuest) {
			return $this->goHome();
		}

		$model = new LoginForm();
		if ($model->load(Yii::$app->request->post()) && $model->login()) {
			return $this->goBack();
		} else {
			return $this->render('login', [
						'model' => $model,
			]);
		}
	}

	/**
	 * Logs out the current user.
	 *
	 * @return mixed
	 */
	public function actionLogout() {
		Yii::$app->user->logout();

		return $this->goHome();
	}

	/**
	 * Displays contact page.
	 *
	 * @return mixed
	 */
	public function actionContact() {
		$model = new ContactForm();
		if ($model->load(Yii::$app->request->post()) && $model->validate()) {
			if ($model->sendEmail(Yii::$app->params['adminEmail'])) {
				Yii::$app->session->setFlash('success', 'Thank you for contacting us. We will respond to you as soon as possible.');
			} else {
				Yii::$app->session->setFlash('error', 'There was an error sending email.');
			}

			return $this->refresh();
		} else {
			return $this->render('contact', [
						'model' => $model,
			]);
		}
	}

	/**
	 * Displays about page.
	 *
	 * @return mixed
	 */
	public function actionAbout() {
		return $this->render('about');
	}

	/**
	 * Signs user up.
	 *
	 * @return mixed
	 */
	public function actionSignup() {
		$model = new SignupForm();
		if ($model->load(Yii::$app->request->post())) {
			if ($user = $model->signup()) {
				if (Yii::$app->getUser()->login($user)) {
					return $this->goHome();
				}
			}
		}

		return $this->render('signup', [
					'model' => $model,
		]);
	}

	/**
	 * Requests password reset.
	 *
	 * @return mixed
	 */
	public function actionRequestPasswordReset() {
		$model = new PasswordResetRequestForm();
		if ($model->load(Yii::$app->request->post()) && $model->validate()) {
			if ($model->sendEmail()) {
				Yii::$app->session->setFlash('success', 'Check your email for further instructions.');

				return $this->goHome();
			} else {
				Yii::$app->session->setFlash('error', 'Sorry, we are unable to reset password for email provided.');
			}
		}

		return $this->render('requestPasswordResetToken', [
					'model' => $model,
		]);
	}

	/**
	 * Resets password.
	 *
	 * @param string $token
	 * @return mixed
	 * @throws BadRequestHttpException
	 */
	public function actionResetPassword($token) {

		try {
			$model = new ResetPasswordForm($token);
		} catch (InvalidParamException $e) {
			throw new BadRequestHttpException($e->getMessage());
		}

		if ($model->load(Yii::$app->request->post()) && $model->validate() && $model->resetPassword()) {
			Yii::$app->session->setFlash('success', 'New password was saved.');

			return $this->goHome();
		}

		return $this->render('resetPassword', [
					'model' => $model,
		]);
	}

	public function actionSeekpassword() {
		$model = new User;
		if (Yii::$app->request->isPost) {
			$post = Yii::$app->request->post();
			if ($model->seekPass($post)) {
				return $this->success('login');
			} else {
				return $this->error('用户名与邮箱不匹配');
			}
		}
		$this->layout = "layout2";
		return $this->render('seekpassword', ['model' => $model]);
	}

	public function actionSetpassword() {
		$this->layout = false;
		$time = Yii::$app->request->get("timestamp");
		$username = Yii::$app->request->get("username");
		$token = Yii::$app->request->get("token");
		$model = new User();
		$myToken = $model->createToken($username, $time);
		if ($token != $myToken) {
			return $this->error("验证失败", ['seekpassword']);
//            Yii::$app->end();
		}
		if (time() - $time > 300) {
			return $this->error("已经过了限定的时间", ['seekpassword']);
//            $this->redirect([ 'login' ]);
//            Yii::$app->end();
		}
		$model = User::findOne(['username' => $username]);
		if (Yii::$app->request->isPost) {
			$post = Yii::$app->request->post();
			$password = $post['User']['password_hash'];
			$model->cryptPassword($password);
			if ($model->save()) {
				return $this->success(['login']);
			}
		}
		$model->password_hash = "";
		$this->layout = "layout2";
		return $this->render('setpassword', ['model' => $model]);
	}

}
